﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using WeifenLuo.WinFormsUI.Docking;
using System.Collections;

namespace LCWMS
{
    public partial class  w_asn060 : DockContent
    {
        DataSet dscustomer;
        DataSet ds_tran;
        Cursor currentCursor = Cursor.Current;

        public w_asn060()
        {
            InitializeComponent();
            dgv_tran.AutoGenerateColumns = false;
        }



        //添加采购定单的合计行
        private void f_add_order()
        {
            decimal i_1, i_2, i_3, i_4, i_5;
            decimal d_1, d_2, d_3, d_4, d_5;
            DataTable dt_put;
            //增加一个合计行 
            dt_put = (DataTable)dgv_tran.DataSource;
            i_1 = Convert.ToInt32(dt_put.Compute("Sum(" + dt_put.Columns["totalBillQty"].ColumnName + ")", "true"));
            i_2 = Convert.ToInt32(dt_put.Compute("Sum(" + dt_put.Columns["totalSku"].ColumnName + ")", "true"));
            i_3 = Convert.ToInt32(dt_put.Compute("Sum(" + dt_put.Columns["totalPallet"].ColumnName + ")", "true"));
            i_4 = Convert.ToInt32(dt_put.Compute("Sum(" + dt_put.Columns["totalCatonQty"].ColumnName + ")", "true"));
            d_5 = (decimal)dt_put.Compute("Sum(" + dt_put.Columns["totalPutawayQty"].ColumnName + ")", "true");
            DataRow dr = dt_put.NewRow();
            dr["putawayer"] = "合计";
            dr["totalBillQty"] = i_1;
            dr["totalSku"] = i_2;
            dr["totalPallet"] = i_3;
            dr["totalCatonQty"] = i_4;
            dr["totalPutawayQty"] = d_5;
            ((DataTable)dgv_tran.DataSource).Rows.InsertAt(dr, ((DataTable)dgv_tran.DataSource).Rows.Count);
        }


        private void btn_Query_Click(object sender, EventArgs e)
        {
            

            lb_rows.Text = "总行数：0";

            // 设置为忙碌状态
            Cursor.Current = Cursors.WaitCursor;

            string str_sql =
" SELECT " +
// "   putaway_date, " +                                      // 上架日期
"   putawayer, " +                                         // 上架人id
"   user_name, " +                                         // 上架人名称
"   COUNT(DISTINCT a.asn_no) totalBillQty, " +                   // 订单数
"   COUNT(DISTINCT a.sku) totalSku, " +                      // 品项数
"   COUNT(*) totalPallet, " +                                   // 托盘数
"   SUM(ceiling(a.putaway_qty_m/ c.qty02)) totalCatonQty, " +     // 整件数
"   SUM(a.putaway_qty_m) totalPutawayQty  " +                         // 数量
" FROM wms.asn_putaway a, wms.sys_user b, wms.mst_pack c  " +
" WHERE " +
"   a.inv_org = b.inv_org  " +
"   AND a.putawayer = b.user_id  " +
"   AND a.inv_org = c.inv_org  " +
"   AND a.consignor = c.consignor  " +
"   AND a.sku = c.sku  " +
"   AND a.pack_code = c.pack_code " +
"   AND a.inv_org='" + main.g_org + "'";




            if (cb_consignor.Text.Trim() != "")
            {
                str_sql = str_sql + " and a.consignor = '" + cb_consignor.Text.Trim() + "'";
            }

            if (dtp_h_time.Text.Trim() != "")
            {
                str_sql = str_sql + " and a.putaway_date between '" + dtp_h_time.Text.ToString().Trim() + "' and '" + dtp_h_endtime.Text.ToString().Trim() + "'";
            }


            str_sql += " group by a.putawayer,b.user_name ";
            str_sql += " order by a.putawayer,b.user_name  ";
            try
            {
                if (main.dbtype == "SQL")
                {
                    ds_tran = main.dbservice.Sql_exec_selectsql(str_sql);
                }
                else
                {
                    ds_tran = main.dbservice.oracle_exec_selectsql(str_sql);
                }
                if (ds_tran.Tables[0].Rows.Count > 0)
                {
                    lb_rows.Text = "总行数：" + ds_tran.Tables[0].Rows.Count.ToString();
                    dgv_tran.DataSource = ds_tran.Tables[0];
                    f_add_order();
                }
                else
                    dgv_tran.DataSource = null;
            }
            catch (System.Exception ee)
            {
                dgv_tran.DataSource = null;
                MessageBox.Show(main.g_class.comm_getchangestring("Fail to Query", main.g_info_dataset) + "!" + ee.ToString());
            }
            Cursor.Current = currentCursor;
        }

        private void w_asn060_Load(object sender, EventArgs e)
        {
            
            dscustomer = new DataSet();
            
          
            try
            {
                dscustomer = new DataSet();
                dscustomer = main.g_class.comm_get_consignor();
                cb_consignor.DataSource = dscustomer.Tables[0];
                cb_consignor.ValueMember = "consignor";
                cb_consignor.DisplayMember = "consignor";

                //语言转换
                main.g_class.comm_changeControl(this, main.g_win_dataset);
            }
            catch (System.Exception ee)
            {
                MessageBox.Show(main.g_class.comm_getchangestring("Fail to initialize Information of transaction type", main.g_info_dataset) + "!" + ee.ToString());
                return;
            }

            dtp_h_time.CustomFormat = "yyyy.MM.dd"; // "yyyy.MM.dd"
            dtp_h_time.Format = DateTimePickerFormat.Custom;
            dtp_h_time.Value = System.Convert.ToDateTime(DateTime.Now.ToString("yyyy.MM.dd").Trim());
            dtp_h_endtime.CustomFormat = "yyyy.MM.dd";
            dtp_h_endtime.Format = DateTimePickerFormat.Custom;
            dtp_h_endtime.Value = System.Convert.ToDateTime(DateTime.Now.ToString("yyyy.MM.dd").Trim());


            //按钮权限控制
            string str_right;
            str_right = main.g_class.comm_getright("w_asn060", main.g_right_dataset);


            //查询
            if (str_right.Substring(4, 1) == "0")
            {
                this.btn_Query.Visible = false;
            }

            else
            {
                this.btn_Query.Visible = true;
            }

            //导出ＥＸＣＥＬ
            if (str_right.Substring(5, 1) == "0")
            {
                this.btn_excel.Visible = false;
            }
            else
            {
                this.btn_excel.Visible = true;
            }
           
           
        }

        private void dgv_tran_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {

        }

        private void lb_batchno_Click(object sender, EventArgs e)
        {

        }

        private void dgv_tran_CellClick(object sender, DataGridViewCellEventArgs e)
        {
           // i_trans_header = e.ColumnIndex;

        }

        private void dgv_tran_Sorted(object sender, EventArgs e)
        {
            //string str_headertext;
            ////先删除合计行
            //((DataTable)dgv_tran.DataSource).Rows.Remove(((DataTable)dgv_tran.DataSource).Select("pack_code = '合计'")[0]);
            ////然后对Tables[0]重新排序
            //DataTable dt;
            //DataView dv = ((DataTable)dgv_tran.DataSource).DefaultView;
            ////得到点击的列
            //str_headertext = dgv_tran.Columns[i_trans_header].DataPropertyName.ToString().Trim();
            //if (b_trans_sort) //升序
            //{
            //    dv.Sort = str_headertext + " DESC";
            //    b_trans_sort = false;
            //}
            //else
            //{
            //    dv.Sort = str_headertext;
            //    b_trans_sort = true;
            //}
            //dt = dv.ToTable();
            //dgv_tran.DataSource = null;
            //dgv_tran.DataSource = dt;
            ////增加合计行
            //f_add_transf();
        }

        private void cb_consignor_TextChanged(object sender, EventArgs e)
        {
            string str_cust;
            str_cust = cb_consignor.Text.Trim();
            tb_cusname.Text = main.g_class.comm_findname(str_cust, dscustomer);
        }

        private void dgv_tran_DoubleClick(object sender, EventArgs e)
        {
             
        }
        private void btn_excel_Click(object sender, EventArgs e)
        {
            if (dgv_tran.Rows.Count > 0)
            {
                main.g_class.DataGridViewToExcel(dgv_tran);
            }
        }


        //复制某一列值到剪贴板
        private void CopyColumnValueToClipboard(DataGridView dgv, int rowIndex, int columnIndex)
        {
            if (dgv.Rows.Count <= rowIndex || columnIndex < 0)
            {
                // 检查索引是否超出范围
                return;
            }

            string value = dgv.Rows[rowIndex].Cells[columnIndex].Value.ToString();
            if (value != null)
            {
                Clipboard.SetText(value);


                MessageBox.Show("已复制到剪贴板");
            }
        }

        private void dgv_tran_CellContentDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            int i_temp = dgv_tran.CurrentRow.Index;
            string str_name = dgv_tran.Columns[dgv_tran.CurrentCell.ColumnIndex].Name.ToString().Trim();
            //if (str_name == "so_no")
            //{

                //如果你想复制第二行第三列的值：
            CopyColumnValueToClipboard(dgv_tran, i_temp, dgv_tran.CurrentCell.ColumnIndex);
            //}
        }

        private void btn_q_customer_code_Click(object sender, EventArgs e)
        {
            
        }

        private void btn_q_sku_Click(object sender, EventArgs e)
        {
            
        }

        private void dgv_tran_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e)
        {
            //自动编号，与数据无关
            Rectangle rectangle = new Rectangle(e.RowBounds.Location.X,
               e.RowBounds.Location.Y,
               dgv_tran.RowHeadersWidth - 4,
               e.RowBounds.Height);
            TextRenderer.DrawText(e.Graphics,
                  (e.RowIndex + 1).ToString(),
                   dgv_tran.RowHeadersDefaultCellStyle.Font,
                   rectangle,
                   dgv_tran.RowHeadersDefaultCellStyle.ForeColor,
                   TextFormatFlags.VerticalCenter | TextFormatFlags.Right);
        }

        // 删除行
        private void dgv_tran_MouseClick(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Right)
            {
                ContextMenu m = new ContextMenu(); // 创建一个 ContextMenu
                MenuItem deleteRowItem = new MenuItem("删除行"); // 创建一个 MenuItem
                deleteRowItem.Click += dgv_tran_DeleteRowItem_Click; // 添加点击事件
                m.MenuItems.Add(deleteRowItem);

                int currentMouseOverRow = dgv_tran.HitTest(e.X, e.Y).RowIndex;   // 将 MenuItem 添加到 ContextMenu
                m.Show(dgv_tran, new Point(e.X, e.Y));                           // 显示 ContextMenu
            }
        }

        private void dgv_tran_DeleteRowItem_Click(object sender, EventArgs e)
        {

            w_dgv_deleterow wsingle = new w_dgv_deleterow();
            wsingle.ShowDialog();
            int i_row_start = w_dgv_deleterow.i_row_start - 1;
            int i_row_end = w_dgv_deleterow.i_row_end - 1;

            // 确保起始行和结束行在有效范围内
            if (i_row_start < 0) return;
            if (i_row_end >= dgv_tran.Rows.Count || i_row_start > i_row_end)
            {
                MessageBox.Show("超出有效范围！");
                return;
            }

            // 从 DataGridView 中删除指定范围的行 (从后向前删除行，避免索引变化问题)
            for (int i = i_row_end; i >= i_row_start; i--)
            {
                dgv_tran.Rows.RemoveAt(i);
            }

        }
    }
}